// ==UserScript==
// @name        PTE Decorator
// @namespace   http://portilho.com/
// @version     0.3
// @description PTE Decorator
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js
// @require     http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js
// @require     http://epp-jslib.googlecode.com/hg-history/0.1.2/src/epp-string.js
// @require     http://epp-jslib.googlecode.com/hg-history/0.1.2/src/epp-date-time.js
// @require     https://bitbucket.org/eduardoportilho/userscripts/raw/tip/src/petrobras/regras-stiff.js
// @match       https://*.petrobras.com.br/PTPE/*
// ==/UserScript==
(function() {
    
    calculaHorasTrabalhadas();

    function calculaHorasTrabalhadas() {
        var regrasStiff = new RegrasStiff();
        adicionaColunaHorasTrabalhadas();
        calculaTotalHorasTrabalhadas(regrasStiff);
    }

    function adicionaColunaHorasTrabalhadas() {
        $('#ContentPlaceHolder1_gvMarcacao tr:first-child').append('<th scope="col">Horas</th>');
        $('#ContentPlaceHolder1_gvMarcacao tr.BgTrPair, #ContentPlaceHolder1_gvMarcacao tr.BgTrOdd').each(function(){
            var horas = [
                $(this).find('td:nth-child(2) .hora').text().trim(),
                $(this).find('td:nth-child(3) .hora').text().trim(),
                $(this).find('td:nth-child(4) .hora').text().trim(),
                $(this).find('td:nth-child(5) .hora').text().trim()
            ]
            var data = $(this).find('.data').text();
            var ehHoje = EPPDate.ehHoje(data);

            var horasTrabalhadas = EPPTime.calculaHorasTrabalhadas(horas, ehHoje);
            $(this).closest('tr').append('<td>'+ horasTrabalhadas.toString() +'</td>');
        });
    }

    function calculaTotalHorasTrabalhadas(regrasStiff) {
        var entradas = $('#ContentPlaceHolder1_gvMarcacao tr.BgTrPair, #ContentPlaceHolder1_gvMarcacao tr.BgTrOdd').map(function(){
            var data = $(this).find('.data').text();
            var horas = [
                $(this).find('td:nth-child(2) .hora').text().trim(),
                $(this).find('td:nth-child(3) .hora').text().trim(),
                $(this).find('td:nth-child(4) .hora').text().trim(),
                $(this).find('td:nth-child(5) .hora').text().trim()
            ];
            return {
                data: data,
                horas: horas
            };
        }).get();

        var groupByData = _.groupBy(entradas, function(it) { return it.data });
        var horasPorDataObj = _.mapValues(groupByData, function(dataHorasObjArray) {
            return _.flatten(dataHorasObjArray.spread('horas'));
        });

        var horasTrabalhadas = regrasStiff.calculaHorasTrabalhadas(horasPorDataObj);
        $('.ObservacaoConteudo > .linha:last-child').append('<div class="coluna Dupla"><label for="nomeCurso">Balanço Período:</label><span id="ContentPlaceHolder1_lblPeriodo">&nbsp;' + horasTrabalhadas.toString() + '</span></div>');
    }
})();